package com.example.springdemo.mongodb;

import org.apache.tomcat.util.bcel.classfile.Constant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * mongo服务实现层
 * @author zhangding
 * @date 2021年12月16日20:59:19
 * @param <T>
 */
@Service
public class MongoServiceImpl<T> implements MongoService<T> {

    @Autowired
    MongoTemplate mongoTemplate;
    @Override
    public void save(T t){
        mongoTemplate.save(t);
    }
    @Override
    public T queryById(Class<T> cls,String idOrAnyone){
        return mongoTemplate
                .findOne(new Query()
                         .addCriteria(
                                 new Criteria()
                                .orOperator(
                                        // 查询条件，为并列或条件
                                        Criteria.where("_id")
                                        .is(idOrAnyone),
                                        // 也可以调用方传性别，MongoDB会拿gender做筛选，但要是出现多个，会默认返回第一个
                                        Criteria.where("gender")
                                        .is(idOrAnyone)
                                )
                         ),cls);
    }

    @Override
    public List<T> query(Class<T> cls, Query query){
        return mongoTemplate.find(query,cls);
    }
    @Override
    public void update(T t){
        /**
         * 只要传入文档的主键，mongo就会自动进行更新
         */
         mongoTemplate.save(t);
    }
    @Override
    public void delete(Class<T> cls, Query query){
        mongoTemplate.remove(query,cls);
    }

}
